#include <stdio.h>
#include <stdlib.h>

// 定义顺序表的结构体
typedef struct {
    int *data;     // 指向动态分配数组的指针
    size_t size;   // 顺序表中当前元素的数量
    size_t capacity;// 动态分配数组的容量
} DynamicArray;

// 初始化顺序表
void initArray(DynamicArray *a) {
    a->data = malloc(10 * sizeof(int)); // 初始容量设置为10
    if (a->data == NULL) {
        perror("Memory allocation failed");
        exit(EXIT_FAILURE);
    }
    a->size = 0;
    a->capacity = 10;
}

// 扩展顺序表的容量
void resize(DynamicArray *a) {
    a->capacity *= 2; // 新的容量是旧容量的两倍
    int *newData = realloc(a->data, a->capacity * sizeof(int));
    if (newData == NULL) {
        perror("Memory reallocation failed");
        exit(EXIT_FAILURE);
    }
    a->data = newData;
}

// 添加元素到顺序表
void append(DynamicArray *a, int element) {
    if (a->size >= a->capacity) {
        resize(a); // 如果没有足够的空间，扩展容量
    }
    a->data[a->size++] = element; // 添加元素
}

// 打印顺序表
void printArray(const DynamicArray *a) {
    for (size_t i = 0; i < a->size; i++) {
        printf("%d ", a->data[i]);
    }
    printf("\n");
}

// 销毁顺序表，释放内存
void destroyArray(DynamicArray *a) {
    free(a->data);
    a->data = NULL;
    a->size = 0;
    a->capacity = 0;
}

int main() {
    DynamicArray array;
    initArray(&array);

    // 向顺序表添加一些元素
    append(&array, 1);
    append(&array, 2);
    append(&array, 3);
    append(&array, 4);
    append(&array, 5);

    // 打印顺序表
    printf("Dynamic Array contains: ");
    printArray(&array);

    // 销毁顺序表
    destroyArray(&array);

    return 0;
}